import axios from "axios";
import store from "@/store"; // 引入 Vuex Store
import { ElMessage } from "element-plus";

// 创建一个 axios 实例
const instance = axios.create({
  // baseURL: "/dev", // 移除固定的baseURL，改为动态处理
  timeout: 1000000, // 设置超时时间（单位：毫秒）
});

// 定义一个变量来保存 Vue Router 实例
let router = null;

// 请求拦截器
instance.interceptors.request.use(
  (config) => {
    // 动态处理baseURL
    const url = config.url || '';
    if (url.startsWith('/tes')) {
      // 保持原URL，不添加前缀
    } else {
      // 其他请求添加/dev前缀
      if (!url.startsWith('/dev')) {
        config.url = '/dev' + (url.startsWith('/') ? url : '/' + url);
      }
    }

    // 判断是否需要添加 token
    if (!config.noToken) {
      const token = localStorage.getItem("token");
      // console.log(token,'token');
      if (token) {
        config.headers.Authorization = `Bearer ${token}`;
      }
    }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
instance.interceptors.response.use(
  (response) => {
    // 检查是否是 blob 类型的响应
    if (response.config.responseType === "blob") {
      return response; // 直接返回响应，交给具体的业务逻辑处理
    }

    // 处理 JSON 响应
    const { code, msg, message } = response.data;

    if (code === 200) {
      // 业务成功，返回数据
      return response.data;
    } else if (code == 100105) {
      return response.data;
    } else if (code == 100106) {
      return response.data;
    } else if (code == 404) {
      return response.data;
    } else if (code == 501) {
      return response.data;
    } else if (code === 401) {
      // 业务未授权，跳转到登录页面
      ElMessage.error(msg || "未授权，请重新登录");
      store.dispatch("logout"); // 调用 Vuex 的登出方法
      if (router) {
        router.push("/login"); // 使用 Vue Router 跳转到登录页面
      } else {
        window.location.href = "/login"; // 如果没有注入 router，则使用原生跳转
      }
      return Promise.reject(msg || "未授权，请重新登录");
    } else {
      // 其他业务错误
      ElMessage.error(msg || message || "请求失败");
      return Promise.reject(msg || message || "请求失败");
    }
  },
  (error) => {
    if (error.response) {
      const status = error.response.status;

      if (status === 401) {
        console.error("未授权，请重新登录");
        store.dispatch("logout"); // 调用 Vuex 的登出方法
        if (router) {
          router.push("/login"); // 使用 Vue Router 跳转到登录页面
        } else {
          window.location.href = "/login"; // 如果没有注入 router，则使用原生跳转
        }
      } else {
        return Promise.reject(error.response.data || "服务器错误");
      }
    } else {
      return Promise.reject(error.message || "网络错误");
    }
  }
);

// 导出插件
export default {
  install(app) {
    app.config.globalProperties.$axios = instance; // 注入为 this.$axios

    // 将 Vue Router 实例注入到 Axios 中
    router = app.config.globalProperties.$router;
  },
};
